DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
Certain behavior of normal FATE operations should be modified to accommodate trash can feature.
2.2.1 Delete Table Operation
When trashing is enabled, the behavior of the delete table FATE operation should be different. After obtaining the table lock, delete table should do the following for a table not in TRASH:
...
Whereas, if the delete table operation is called on a table already in the TRASH state, it should proceed with the normal delete operations.
2.2.2 Undelete Operation
This will require a new fate operation. This fate operation should be similar to the rename table operation, with the additional operation of changing the table state to ONLINE. The original name of the table in the trash can be extracted from its table-name. The table should be renamed to this name.
2.
...
3 Changes in Behaviors
When the master sees a table state of TRASH, the goal state for tablets in that table should be UNASSIGNED. Attempting to initiate an operation on a table in trash should fail. Checks like this are already conducted for offline tables. We can do checks for trash tables in the same place.
The amount of time tables spend in the trash state before really being deleted should be configurable via a system property. Network timing can be unreliable. So, the master can be modified to maintain a timer which keeps track of when each table in the trash should be deleted. Tables can be added to this timer by the delete operation. And on timeout, the timer can simply trigger a delete FATE operation of the corresponding table in the trash.
If a table in trash references certain files, they should not be deleted by the Accumulo garbage collector.
2.4 Configuration Properties
Certain new configuration properties must be supported so that the user can set certain parameters. They could be:
- general.trash.enable - Used to enable trashing feature in Accumulo. Can be done at runtime without restarts
- general.trash.timeout - Used to set the maximum time after which the tables in trash will be deleted automatically
- general.trash.maxspace - Used to set the maximum space allotted for tables in trash. When the space is exceeded, the table with oldest delete timestamp can be discarded to make space.