apr  
                
                  
                    January 7, 2020, 11:17pm
                   
                  1 
               
             
            
              I am noticing something strange on elixir 1.9.4 with erlang 22.2.
Erlang/OTP 22 [erts-10.6] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(app@127.0.0.1)1>  :ets.new(:test_table, [:set, :named_table, :public, {:write_concurrency, true}, {:read_concurrency, true}])  
:test_table
iex(app@127.0.0.1)2>  :ets.info(:test_table)
[
  id: #Reference<0.3021804751.1718747137.69759>,
  read_concurrency: true,
  write_concurrency: false,
  compressed: false,
  memory: 301,
  owner: #PID<0.2177.7>,
  heir: :none,
  name: :test_table,
  size: 0,
  node: :"app@127.0.0.1",
  named_table: true,
  type: :set,
  keypos: 1,
  protection: :public
]
It appears that the write_concurrency property is not being respected. Does anybody know if this is a regression?
             
            
              1 Like 
            
            
           
          
            
            
              Worked here on 1.9.2 with erlang 22.22:
iex(1)> :ets.new(:test_table, [:set, :named_table, :public, {:write_concurrency, true}, {:read_concurrency, true}])  
:test_table
iex(2)> :ets.info(:test_table)
[
  id: #Reference<0.2454829455.2262695941.100902>,
  read_concurrency: true,
  write_concurrency: true,
  compressed: false,
  memory: 1325,
  owner: #PID<0.108.0>,
  heir: :none,
  name: :test_table,
  size: 0,
  node: :nonode@nohost,
  named_table: true,
  type: :set,
  keypos: 1,
  protection: :public
]
 
            
              
            
           
          
            
              
                apr  
              
                  
                    January 8, 2020,  1:21am
                   
                  3 
               
             
            
              Very strange. I downloaded Erlang (esl_erlang=1:22.2.1-1) from the erlang-solutions package and the above error showed up. However it works with esl_erlang=1.22.1.8-1. Not sure why it’s working on your Erlang 22.2 and not mine.
             
            
              
            
           
          
            
            
              
It is part of the OTP-16315  optimization where any locks around ETS tables are removed when using only 1 scheduler.
             
            
              13 Likes 
            
            
           
          
            
            
              You mean on single-core systems?
             
            
              
            
           
          
            
              
                NobbZ  
              
                  
                    January 8, 2020,  1:10pm
                   
                  6 
               
             
            
              No, on systems where only one scheduler is started.
This is the default for single core machines, but you can also do that via runtime flags.
             
            
              1 Like 
            
            
           
          
            
            
              
Ah fascinating, thanks for that!  I have 16 schedulers running here so that explains it.  Locks are indeed not needed on single-core/single-scheduler systems.  
             
            
              
            
           
          
            
              
                apr  
              
                  
                    January 8, 2020,  5:49pm
                   
                  8 
               
             
            
              Ah ok, thanks for the info. I did see that in the changelog, but didn’t connect the dots. Also, I am able to set read_concurrency to true. Why does the optimization still allow for that? Is it because locks for read concurrency are implemented differently?
             
            
              
            
           
          
            
            
              
Well, technically the locks in the ETS table still use read_concurrency, there just aren’t any 
It is just an oversight on my part that it is not removed. I’ll make a note of fixing that in a future release.
             
            
              3 Likes 
            
            
           
          
            
              
                apr  
              
                  
                    January 9, 2020,  5:44pm
                   
                  10 
               
             
            
              Gotcha, thanks for the detailed info