Things to examine before committing a new feature :
- OS
- what will happen in Linux/Win/AIX/POWERPC? (vice versa)
- Is agent / db on other OSs acts the same? (
process per connection
, …) - Do common parts of the code use os agnostic code ? (types.h, no OS specific API, …)
- Environments
- K8S
- BigData
- Memory
- Heap / pool allocation
- Deletion - what happens at deletion of the object, container (pool deleted, pointers still exist)
- When does this memory becomes invalid?
- Can it be used uninitialized / deleted / destructed ?
- TLS - if same thread will be reused? (For same connection for instance, is TLS in Dynamic lib?)
- Edge cases
- collector goes down
- crashed with db
- stopped
- Agent goes down - are there any leftovers in db?
- Configuration is changed during runtime (after init)
- Open mode connections
- Encrypted connections
- Race conditions? ____________
- Initialization order (db’s after agent and vice versa)
- Recursion - might loop infinitely?
- Overflows (if we get more than bytes than existing buffer?)
- Are all code flows covered (what happens when a basic obvious function returns false?)
- collector goes down
- Scale
- High load - short / long connections
- High payload (large queries)
- Frequency - how much times is expected to run for different cases
- Security
- Might be blocked by antivirus?
- Permissions
- Can some one else affect this functionality ? (A file on disk, an object , ipc)
- Co-existence
- Multiple db instances on same machine?
- Multiple different db’s on same machine?