.. index::
   pair: Blog; New Features

.. highlight:: rst

.. _features:


=====
BLOG
=====

New Features
-------------

This blog is used to track new features added to EOS.

October 2024

* The eos CLI provides now a similar command to the du shell command:
  `eos du -s /eos/mydir` 
  `eos du -s -h /eos/mydir`
  `eos du -s -h --si /eos/mydir`
  `eos du -a /eos/mydir`
  
September 2023
^^^^^^^^^^^^^^

* FSTs now publish regulary S.M.A.R.T information and the MGM can provide statistics by storage device or model categories including age, capacity etc.
  The information is available using the new devices interface:

  `eos devices ls [-l]`

  All the information is also available as JSON output using `eos --json devices ls`! The feature will be available with EOS 5.2!

* `eos df` supports now JSON output e.g. `eos --json df` and prints the performance capacity ratio in GB/s per TB
  
August 2023
^^^^^^^^^^

* The EOS group balancer had been rewritten during 2023 and now supports a 'free space engine'
  Instead of balancing groups to the same usage level (percentage),
  groups are balanced to have the same amount of free space. This allows
  to avoid significant performance degradation when an EOS instance is
  close to be full. 

June 2023
^^^^^^^^^

* The EOS MGM provides now a meta-data benchmark command to measure MGM performance
   Example:

   `eos ns benchmark 100 10 10 # see the help in the CLI`

   The tool got added when validating the shared mutex implementation of the Abseil library
   as a new namespace mutex implementation, which performs much better than the
   standard C++ implementation. The new mutex will be available with EOS 5.2!
   
May 2023
^^^^^^^^

* Support external FST hostname (port) aliases by defining
   * sysconfig: EOS_FST_ALIAS=externalhostname.domain
   * sysconfig: EOS_FST_PORT_ALIAS=externalport (normally the same)

  The aliases are shown when using
   * `eos fs ls -l`
   * `eos fs ls -m`

.. note:: When an alias is removed on an FST, the MGM and FST have to be shutdown and restarted to get rid of the aliases


March 2023
^^^^^^^^^^^^^

* HTTPS gateways can use now a shared key to act as gateway for an EOS instance. This simplifies deployment and removes the need
  to specify the IPV6 addresses of each gateway node using the vid interface.

  Example:
  * `vid set map -https key:e9d2011d-942a-4ec1-9f78-3643316ed336 vuid:100`
  * `vid set map -https key:e9d2011d-942a-4ec1-9f78-3643316ed336 vgid:100`
  * If a client sends the header "x-gateway-authorization:  e9d2011d-942a-4ec1-9f78-3643316ed336" he will be authenticated as user 100 in this example.
  * If user 100 is a sudoer, the client can select the effective user ID specifying a "remote-user: ..." header.

* `newfind` has now improved performance and new usability features.

  Examples:
  * `eos newfind --format uid,gid,checksum,fxid,atime,btime /eos/ #select output format`
  * `eos newfind --count -d /eos/dev/ #better performance`
  * `eos newfind --treecount /eos/dev/ #aggregate number of dirs and files`
  * `eos newfind --cache ... #store items in in-memory MD cache, by default we don't cache meta-data to avoid trashing`


January 2023
^^^^^^^^^^^^^


* Token identity mapping can now be controlled using `eos vid tokensudo always|strong|encrypted|never`
   * `always` - identity in the token is always taken into account
   * `strong` - identity in the token is not taken into account for unix authenticated clients
   * `encrypted` - identity in the token is only taken into account for encrypted connections
   * `never` - identity in the token is never taken into account

* It is now possible to black-/whitelist EOS tokens using the _access__ interface. This allows e.g. to prevent arbitrary token generation by users and implement an approval process. When using the white list mode, all user created tokens appear in the logfile `/var/log/eos/mgm/TokenCmd.log` e.g.

.. code-block:: bash 

   230113 11:17:19 WARN  TokenCmd:218                   creating voucher=7630eb7e-932b-11ed-8d40-0071c2181e97 path=/eos/foo/ owner=123 group=123 perm=rx expires=1673605339 token:'{ "token": {  "permission": "rx",  "expires": "1673605339",  "owner": "bar",  "group": "bar",  "generation": "1",  "path": "/eos/foo/",  "allowtree": true,  "vtoken": "",  "origins": [] },}'

An admin can now whitelist this token by issuing:
.. code-block:: bash 

   eos access allow token 7630eb7e-932b-11ed-8d40-0071c2181e97

In blacklist mode it is possible to disable token usage if required using:

.. code-block:: bash 

   eos access ban 7630eb7e-932b-11ed-8d40-0071c2181e97


December 2022
^^^^^^^^^^^^^

* The file inspector daemon now reports access time and birth time distributions:

.. code-block:: bash 

    inspector -l
    ...
    ======================================================================================
     Access time distribution of files
     0s                               : 1613 (1.59%)
     24h                              : 6 (0.01%)
     7d                               : 1 (0.00%)
     30d                              : 1 (0.00%)
     2y                               : 5 (0.00%)
     5y                               : 100.02 k (98.40%)
    ======================================================================================
     Access time volume distribution of files
     0s                               : 81.31 MB (98.73%)
     24h                              : 15.09 kB (0.02%)
     7d                               : 0 B (0.00%)
     30d                              : 1.00 MB (1.21%)
     2y                               : 10.49 kB (0.01%)
     5y                               : 24.27 kB (0.03%)
    ======================================================================================
     Birth time distribution of files
     0s                               : 1619 (1.59%)
     24h                              : 6 (0.01%)
     7d                               : 100.00 k (98.39%)
     90d                              : 1 (0.00%)
     5y                               : 13 (0.01%)
    ======================================================================================
     Birth time volume distribution of files
     0s                               : 81.32 MB (98.74%)
     24h                              : 1.01 MB (1.23%)
     7d                               : 25 B (0.00%)
     90d                              : 2769 B (0.00%)
     5y                               : 21.48 kB (0.03%)
    --------------------------------------------------------------------------------------
    
    inspector -m
    key=last layout=00000000 type=plain nominal_stripes=1 checksum=none blockchecksum=none blocksize=4k locations=0 nolocation=12 repdelta:-1=12 unlinkedlocations=0 volume=20480 zerosize=7
    key=last layout=00100002 type=plain nominal_stripes=1 checksum=adler32 blockchecksum=none blocksize=4k locations=101628 nolocation=1 repdelta:-1=1 repdelta:0=101628 unlinkedlocations=0 volume=82338570 zerosize=100003
    kay=last tag=accesstime::files 0=1613 86400=6 604800=1 2592000=1 63072000=5 157680000=100015
    key=last tag=accesstime::volume 0=81309191 86400=15090 604800=0 2592000=1000000 63072000=10495 157680000=24274
    kay=last tag=birthtime::files 0=1619 86400=6 604800=100002 7776000=1 157680000=13


------------

* It is now possible to enable access time tracking e.g. with 1h precision:

.. code-block:: bash 

   eos space config default atime=3600

------------

* Supporting now secondary group permission evaluation with sysconfig setting `EOS_SECONDARY_GROUPS=1`

------------

* `eos register` is a new command which can be used to _inject_ meta-data into EOS

.. code-block:: bash 

   Usage: register [-u] <path> {tag1,tag2,tag3...}
              :  when called without the -u flag the parent has to exist while the basename should not exist
           -u :  if the file exists this will update all the provided meta-data of a file
    
           tagN is optional, but can be one or many of:
                 size=100
                 uid=101 | username=foo
                 gid=102 | username=bar
                 checksum=abcdabcd
                 layoutid=00100112
                 location=1 location=2 ...
                 mode=777
                 btime=1670334863.101232
                 atime=1670334863.101232 
                 ctime=1670334863.110123
                 mtime=1670334863.11234d
                 attr="sys.acl=u:100:rwx"
                 attr="user.md=private"
                 path="/eos/newfile"   # can be used instead of the regular path argument of the path

* `eos ns` reports now a read and write contention value 

.. code-block:: bash 

    eos ns stat:
    ALL      Contention                  :     write:42.11% read:0.00%
    
    eos ns stat -m | grep contention
    uid=all gid=all ns.contention.read=42.11
    uid=all gid=all ns.contention.write=0


------------


November 2022
^^^^^^^^^^^^^

* Added a sharded cache for the ID mapping interface to get better parallelism

------------

* Shipping now *eosxd* based on libfuse2 and *eosxd3* on libfuse3
   * eosxd3 can be started using `-o clone_fd` to have one FUSE connection per thread

------------

* Support for the POSIX VTX bit has been added (e.g. as it is used in /tmp/)