---
# System prepended metadata

title: R&D - What will happen if Cli broke in the middle ?

---

# R&D - What will happen if Cli broke in the middle ?
## How to break
- Quit signal, for example `ctrl+c`
- Panics, if it happens while executing something through cli

## Related problem
- Multiple user trying to install the same package at the same time.

## How currently works
- At the beginning the package information related to its name and version are stored
- Then the installation block is executed
- After installation is completed, the package is stored in `install database`
- Same for remove, gets removed then stored at `removed database`

## Scenarios 
### 1 : exits before installing
- there will not be any issues

### 2 : exits during installation
- for apt installs 
    - there will be no issues,as apt can install same package multiple times
    - so if while installing cli breaks, it will not be installed in the system and will not be stored in database
- others
    - may be problematic 
    - need to check in details

### 3 : exits after installation but before storing to db
- for apt installs
    - even though the system has package installed, theres no record of it in the databse
    - again trying to install there will be no issues,as apt can install same package multiple times, and the database has no entry
- others
    - may be problematic 
    - need to check in details


## How to solve ?
- Through help of database and another process
    - when executing each stage we can assign state of that installation 
        - Before install status : install starting
        - after install status : install completed
        - after db entry : added to db
        - ....
        - pros
            - we can track exactly where the program exited, and take decisions based on that
        - cons
            - easy solutin but complex logic will arise, for example a lot of conditionals on installation, such as check state of the package, if package in certain state, do this and so on.
            - need another process that will check the state of package, if installed and not in database, it will push to `install database` same for the remove

- Using graceful shutdown
    - the idea is to detect the exit signal , but rather than terminating instantly, wait for the installation to complete and then exit program
    - pros
        - it will make sure that everything goes right
    - cons
        - for panics it will not work
        - the user might want to exit instantly but rather he will have to wait, violating the purpose of the user

- Using Database and CLI
    - Database stores states of each installation
    - We can track at what level the installation is
        - started
        - completed
    - Fetch pending installs, or the broken ones
    - Run cleanup 
    - Remove everything of that package
    - Now we can fresh install
     
