// collectionInfo describes important features of a collection.
type collectionInfo struct {
// explicitCreate, if non-nil, will cause the collection to be explicitly
// Create~d (with the given value) before ensuring indexes.
explicitCreate *mgo.CollectionInfo
// indexes listed here will be EnsureIndex~ed before state is opened.
indexes []mgo.Index
// global collections will not have environment filtering applied. Non-
// global collections will have both transactions and reads filtered by
// relevant environment uuid.
global bool
// ignoreInsertRestrictions allows us to run transactions that insert
// to this collection even while the environment is dying. It applies
// only to non-global collections; it was essentially created for the
// convenience of cleanupsC.
ignoreInsertRestrictions bool
// rawAccess collections can be safely accessed as a mongo.WriteCollection.
// Direct database access to txn-aware collections is strongly discouraged:
// merely writing directly to a field makes it impossible to use that field
// with mgo/txn; in the worst case, document deletion can destroy critical
// parts of the state distributed by mgo/txn, causing different runners to
// choose different global transaction orderings; this can in turn cause
// operations to be skipped.
//
// Short explanation follows: two different runners pick different -- but
// overlapping -- "next" transactions; they each pick the same txn-id; the
// first runner writes to an overlapping document and records the txn-id;
// and then the second runner inspects that document, sees that the chosen
// txn-id has already been applied, and <splat> skips that operation.
//
// Goodbye consistency. So please don't mix txn and non-txn writes without
// very careful analysis; and then, please, just don't do it anyway. If you
// need raw mgo, use a rawAccess collection.
rawAccess bool
}