NewKernel constructs a new raw resource persistence kernel over the supplied database.
(db *sql.DB, opts ...Option)
| 137 | |
| 138 | // NewKernel constructs a new raw resource persistence kernel over the supplied database. |
| 139 | func NewKernel(db *sql.DB, opts ...Option) (*Kernel, error) { |
| 140 | if db == nil { |
| 141 | return nil, errors.New("resources: database is required") |
| 142 | } |
| 143 | |
| 144 | kernel := &Kernel{ |
| 145 | db: db, |
| 146 | now: func() time.Time { return time.Now().UTC() }, |
| 147 | maxSpecBytes: defaultMaxSpecBytes, |
| 148 | maxSnapshotRecords: defaultMaxSnapshotRecords, |
| 149 | maxSnapshotBytes: defaultMaxSnapshotBytes, |
| 150 | sourceLocks: make(map[string]*sourceLock), |
| 151 | } |
| 152 | for _, opt := range opts { |
| 153 | if opt != nil { |
| 154 | opt(kernel) |
| 155 | } |
| 156 | } |
| 157 | if kernel.now == nil { |
| 158 | return nil, errors.New("resources: clock is required") |
| 159 | } |
| 160 | if kernel.maxSpecBytes <= 0 { |
| 161 | return nil, errors.New("resources: max spec bytes must be positive") |
| 162 | } |
| 163 | if kernel.maxSnapshotRecords <= 0 { |
| 164 | return nil, errors.New("resources: max snapshot records must be positive") |
| 165 | } |
| 166 | if kernel.maxSnapshotBytes <= 0 { |
| 167 | return nil, errors.New("resources: max snapshot bytes must be positive") |
| 168 | } |
| 169 | return kernel, nil |
| 170 | } |
| 171 | |
| 172 | // ActivateSourceSession registers the active nonce and resets the snapshot version counter for one source. |
| 173 | func (k *Kernel) ActivateSourceSession( |