(request *types.Request)
| 395 | } |
| 396 | |
| 397 | func (db *Database) writeQuery(request *types.Request) (tracker *x.QueryTracker, response *types.Response, err error) { |
| 398 | // check database size first, wal/kayak/chain database size is not included |
| 399 | if db.cfg.SpaceLimit > 0 { |
| 400 | path := filepath.Join(db.cfg.DataDir, StorageFileName) |
| 401 | var statInfo os.FileInfo |
| 402 | if statInfo, err = os.Stat(path); err != nil { |
| 403 | if !os.IsNotExist(err) { |
| 404 | return |
| 405 | } |
| 406 | } else { |
| 407 | if uint64(statInfo.Size()) > db.cfg.SpaceLimit { |
| 408 | // rejected |
| 409 | err = ErrSpaceLimitExceeded |
| 410 | return |
| 411 | } |
| 412 | } |
| 413 | } |
| 414 | |
| 415 | // call kayak runtime Process |
| 416 | var result interface{} |
| 417 | if result, _, err = db.kayakRuntime.Apply(request.GetContext(), request); err != nil { |
| 418 | err = errors.Wrap(err, "apply failed") |
| 419 | return |
| 420 | } |
| 421 | |
| 422 | var ( |
| 423 | tr *TrackerAndResponse |
| 424 | ok bool |
| 425 | ) |
| 426 | if tr, ok = (result).(*TrackerAndResponse); !ok { |
| 427 | err = errors.Wrap(err, "invalid response type") |
| 428 | return |
| 429 | } |
| 430 | tracker = tr.Tracker |
| 431 | response = tr.Response |
| 432 | return |
| 433 | } |
| 434 | |
| 435 | func (db *Database) saveAck(ackHeader *types.SignedAckHeader) (err error) { |
| 436 | return db.chain.VerifyAndPushAckedQuery(ackHeader) |
no test coverage detected