# Friendlier init() response when already initialized

**URL:** <https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322>\
**Category:** Feature Requests\
**Created:** [March 3, 2020, 9:20am UTC](https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322 "2020-03-03T09:20:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Joel\_Thibault](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/joel_thibault/32/74_2.png) [@Joel\_Thibault](https://discuss.hail.is/u/Joel_Thibault)\
**Post date:** [March 3, 2020, 9:20am UTC](https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322/1 "2020-03-03T09:20:18Z")

</div>

[Context: a Terra/GATK workshop where users run some Hail commands in a Terra Jupyter notebook.]

Hail version 0.2.30-2ae07d872f43

Running the init() command when it’s already initialized results in:

> * * *
> 
> FatalError Traceback (most recent call last)  
> in   
> 1 # After importing, start a Hail session  
> ----\> 2 hl.init(default\_reference = “GRCh37”, log = ‘ASHG\_Terra\_workshop.log’)
> 
> \</usr/local/lib/python3.7/dist-packages/decorator.py:decorator-gen-1243\> in init(sc, app\_name, master, local, log, quiet, append, min\_block\_size, branching\_factor, tmp\_dir, default\_reference, idempotent, global\_seed, \_optimizer\_iterations, \_backend)
> 
> /usr/local/lib/python3.7/dist-packages/hail/typecheck/check.py in wrapper(\_\_original\_func, \*args, \*\*kwargs)  
> 583 def wrapper(_original\_func, \*args, \*\*kwargs):  
> 584 args, kwargs_ = check\_all(\_\_original\_func, args, kwargs, checkers, is\_method=is\_method)  
> → 585 return _original\_func(\*args, \*\*kwargs_)  
> 586  
> 587 return wrapper
> 
> /usr/local/lib/python3.7/dist-packages/hail/context.py in init(sc, app\_name, master, local, log, quiet, append, min\_block\_size, branching\_factor, tmp\_dir, default\_reference, idempotent, global\_seed, \_optimizer\_iterations, \_backend)  
> 277 min\_block\_size, branching\_factor, tmp\_dir,  
> 278 default\_reference, idempotent, global\_seed,  
> → 279 \_optimizer\_iterations,\_backend)  
> 280  
> 281
> 
> \</usr/local/lib/python3.7/dist-packages/decorator.py:decorator-gen-1241\> in **init** (self, sc, app\_name, master, local, log, quiet, append, min\_block\_size, branching\_factor, tmp\_dir, default\_reference, idempotent, global\_seed, optimizer\_iterations, \_backend)
> 
> /usr/local/lib/python3.7/dist-packages/hail/typecheck/check.py in wrapper(\_\_original\_func, \*args, \*\*kwargs)  
> 583 def wrapper(_original\_func, \*args, \*\*kwargs):  
> 584 args, kwargs_ = check\_all(\_\_original\_func, args, kwargs, checkers, is\_method=is\_method)  
> → 585 return _original\_func(\*args, \*\*kwargs_)  
> 586  
> 587 return wrapper
> 
> /usr/local/lib/python3.7/dist-packages/hail/context.py in **init** (self, sc, app\_name, master, local, log, quiet, append, min\_block\_size, branching\_factor, tmp\_dir, default\_reference, idempotent, global\_seed, optimizer\_iterations, \_backend)  
> 40 return  
> 41 else:  
> —\> 42 raise FatalError('Hail has already been initialized, restart session ’  
> 43 ‘or stop Hail to change configuration.’)  
> 44
> 
> FatalError: Hail has already been initialized, restart session or stop Hail to change configuration.

From the perspective of a Jupyter user rerunning already-run cells, it appears that something has gone terribly wrong and their notebook is in some invalid state that they need to correct by taking some action. But in reality, the notebook is in a fully usable state: Hail is initialized and ready for use, just as they had intended.

Would it be possible to alter this response to something less alarming? My preference would be something along the lines of:

- no stack trace
- Warning: No action taken for init() because Hail is already initialized. If this call was intended to alter Hail’s configuration, please stop Hail before calling init(), or restart the session.

Thanks!

---

<div class="post-metadata">

**Author:** ![tpoterba](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/tpoterba/32/61_2.png) [@tpoterba](https://discuss.hail.is/u/tpoterba)\
**Post date:** [March 3, 2020, 11:44am UTC](https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322/2 "2020-03-03T11:44:54Z")

</div>

Yeah, this is a reasonable ask. That message is very aggressive.

I really wish notebooks made it impossible to rerun a cell that’s already been run, though (can’t assume things are idempotent!). Maybe someday…

---

<div class="post-metadata">

**Author:** ![tpoterba](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/tpoterba/32/61_2.png) [@tpoterba](https://discuss.hail.is/u/tpoterba)\
**Post date:** [March 3, 2020, 11:50am UTC](https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322/3 "2020-03-03T11:50:29Z")

</div>

Fix here:

> <https://github.com/hail-is/hail/pull/8223>

---

<div class="post-metadata">

**Author:** ![Joel\_Thibault](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/joel_thibault/32/74_2.png) [@Joel\_Thibault](https://discuss.hail.is/u/Joel_Thibault)\
**Post date:** [March 3, 2020, 6:07pm UTC](https://discuss.hail.is/t/friendlier-init-response-when-already-initialized/1322/4 "2020-03-03T18:07:06Z")

</div>

Thanks Tim!
