Warning Node Has Slots In Importing State
- However, when using globals, we still recommend using npm, especially if you use nvm (Node Version Manager). Use git for repository management and make regular commits, it is like taking notes on the process and lets you revert to a previous state in case you get stuck. Use Quasar boot files for any pre-mounting app routines.
- I'd say you should encapsulate as much of your code as possible into functions and classes, limiting the global state when possible. This serves two purposes - the first is that it improves debugging (by limiting the odds that something unintentionally alters global state) and readability (by making it easier to understand what everything does).
Overview
This guide explains how to migrate to safe Buffer
constructor methods. The migration fixes the following deprecation warning:
In this guide you will learn how to import a node Node-RED flow. What is Node RED? Node-RED is a visual tool for wiring the Internet of Things developed by IBM Emerging Technology and the open source community. Using Node-RED, developers wire up input, output and processing nodes to create flows to process data, control things, or send alerts.
- Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x (recommended)
Finding problematic bits of code using grep
Just run grep -nrE '[^a-zA-Z](Slow)?Buffers*(' --exclude-dir node_modules
.
It will find all the potentially unsafe places in your own code (with some considerably unlikelyexceptions).
Finding problematic bits of code using Node.js 8
If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code:
--trace-warnings
will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js.--trace-deprecation
does the same thing, but only for deprecation warnings.--pending-deprecation
will show more types of deprecation warnings. In particular, it will show theBuffer()
deprecation warning, even on Node.js 8.
You can set these flags using environment variables:
Finding problematic bits of code using linters
ESLint rules no-buffer-constructorornode/no-deprecated-apialso find calls to deprecated Buffer()
API. Those rules are included in some presets.
There is a drawback, though, that it doesn't alwayswork correctly when Buffer
isoverridden e.g. with a polyfill, so recommended is a combination of this and some other methoddescribed above.
Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x
This is the recommended solution nowadays that would imply only minimal overhead.
The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ Schedule). This means that these versions of Node.js will not receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible.
What you would do in this case is to convert all new Buffer()
or Buffer()
calls to use Buffer.alloc()
or Buffer.from()
, in the following way:
- For
new Buffer(number)
, replace it withBuffer.alloc(number)
. - For
new Buffer(string)
(ornew Buffer(string, encoding)
), replace it withBuffer.from(string)
(orBuffer.from(string, encoding)
). - For all other combinations of arguments (these are much rarer), also replace
new Buffer(...arguments)
withBuffer.from(...arguments)
.
Note that Buffer.alloc()
is also faster on the current Node.js versions thannew Buffer(size).fill(0)
, which is what you would otherwise need to ensure zero-filling.
Enabling ESLint rule no-buffer-constructorornode/no-deprecated-apiis recommended to avoid accidental unsafe Buffer
API usage.
There is also a JSCodeshift codemodfor automatically migrating Buffer
constructors to Buffer.alloc()
or Buffer.from()
.Note that it currently only works with cases where the arguments are literals or where theconstructor is invoked with two arguments.
If you currently support those older Node.js versions and dropping support for them is not possible, or if you support older branches of your packages, consider using Variant 2or Variant 3 on older branches, so people using those older branches will also receivethe fix. That way, you will eradicate potential issues caused by unguarded Buffer
API usage andyour users will not observe a runtime deprecation warning when running your code on Node.js 10.
Variant 2: Use a polyfill
There are three different polyfills available:
safer-buffer is a drop-in replacement for theentire
Buffer
API, that will throw when usingnew Buffer()
.You would take exactly the same steps as in Variant 1, but with a polyfill
const Buffer = require('safer-buffer').Buffer
in all files where you use the newBuffer
API.Do not use the old
new Buffer()
API. In any files where the line above is added,using oldnew Buffer()
API will throw.buffer-from and/orbuffer-alloc areponyfills for their respective part of the
Buffer
API. You only needto add the package(s) corresponding to the API you are using.You would import the module needed with an appropriate name, e.g.
const bufferFrom = require('buffer-from')
and then use that instead of the call tonew Buffer()
, e.g.new Buffer('test')
becomesbufferFrom('test')
.A downside with this approach is slightly more code changes to migrate off them (as you would beusing e.g.
Buffer.from()
under a different name).safe-buffer is also a drop-in replacement forthe entire
Buffer
API, but usingnew Buffer()
will still work as before.A downside to this approach is that it will allow you to also use the older
new Buffer()
APIin your code, which is problematic since it can cause issues in your code, and will startemitting runtime deprecation warnings starting with Node.js 10(read more here).
Note that in either case, it is important that you also remove all calls to the old Buffer
API manually — just throwing in safe-buffer
doesn't fix the problem by itself, it just providesa polyfill for the new API. I have seen people doing that mistake.
Enabling ESLint rule no-buffer-constructorornode/no-deprecated-apiis recommended.
Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0.
Variant 3 — Manual detection, with safeguards
This is useful if you create Buffer
instances in only a few places (e.g. one), or you have your ownwrapper around them.
Buffer(0)
This special case for creating empty buffers can be safely replaced with Buffer.concat([])
, whichreturns the same result all the way down to Node.js 0.8.x.
Buffer(notNumber)
Before:
After:
encoding
is optional.
Note that the typeof notNumber
before new Buffer()
is required (for cases when notNumber
argument is nothard-coded) and is not caused by the deprecation of Buffer
constructor — it's exactly why theBuffer
constructor is deprecated. Ecosystem packages lacking this type-check caused numeroussecurity issues — situations when unsanitized user input could end up in the Buffer(arg)
createproblems ranging from DoS to leaking sensitive information to the attacker from the process memory.
Warning Node Has Slots In Importing Staten Island
When notNumber
argument is hardcoded (e.g. literal 'abc'
or [0,1,2]
), the typeof
check canbe omitted.
Also, note that using TypeScript does not fix this problem for you — when libs written inTypeScript
are used from JS, or when user input ends up there — it behaves exactly as pure JS, asall type checks are translation-time only and are not present in the actual JS code which TScompiles to.
Buffer(number)
For Node.js 0.10.x (and below) support:
Otherwise (Node.js ≥ 0.12.x):
Regarding Buffer.allocUnsafe()
Be extra cautious when using Buffer.allocUnsafe()
:
- Don't use it if you don't have a good reason to
- e.g. you probably won't ever see a performance difference for small buffers, in fact, thosemight be even faster with
Buffer.alloc()
, - if your code is not in the hot code path — you also probably won't notice a difference,
- keep in mind that zero-filling minimizes the potential risks.
- e.g. you probably won't ever see a performance difference for small buffers, in fact, thosemight be even faster with
- If you use it, make sure that you never return the buffer in a partially-filled state,
- if you are writing to it sequentially — always truncate it to the actual written length
Errors in handling buffers allocated with Buffer.allocUnsafe()
could result in various issues,ranged from undefined behavior of your code to sensitive data (user input, passwords, certs)leaking to the remote attacker.
Note that the same applies to new Buffer()
usage without zero-filling, depending on the Node.jsversion (and lacking type checks also adds DoS to the list of potential problems).
FAQ
What is wrong with the Buffer
constructor?
The Buffer
constructor could be used to create a buffer in many different ways:
new Buffer(42)
creates aBuffer
of 42 bytes. Before Node.js 8, this buffer containedarbitrary memory for performance reasons, which could include anything ranging fromprogram source code to passwords and encryption keys.new Buffer('abc')
creates aBuffer
that contains the UTF-8-encoded version ofthe string'abc'
. A second argument could specify another encoding: for example,new Buffer(string, 'base64')
could be used to convert a Base64 string into the originalsequence of bytes that it represents.- There are several other combinations of arguments.
This meant that in code like var buffer = new Buffer(foo);
, it is not possible to tellwhat exactly the contents of the generated buffer are without knowing the type of foo
.
Sometimes, the value of foo
comes from an external source. For example, this functioncould be exposed as a service on a web server, converting a UTF-8 string into its Base64 form:
Note that this code does not validate the type of req.body.string
:
req.body.string
is expected to be a string. If this is the case, all goes well.req.body.string
is controlled by the client that sends the request.- If
req.body.string
is the number50
, therawBytes
would be50
bytes:- Before Node.js 8, the content would be uninitialized
- After Node.js 8, the content would be
50
bytes with the value0
Because of the missing type check, an attacker could intentionally send a numberas part of the request. Using this, they can either:
- Read uninitialized memory. This will leak passwords, encryption keys and otherkinds of sensitive information. (Information leak)
- Force the program to allocate a large amount of memory. For example, when specifying
500000000
as the input value, each request will allocate 500MB of memory.This can be used to either exhaust the memory available of a program completelyand make it crash, or slow it down significantly. (Denial of Service)
Both of these scenarios are considered serious security issues in a real-worldweb server context.
When using Buffer.from(req.body.string)
instead, passing a number will alwaysthrow an exception instead, giving a controlled behavior that can always behandled by the program.
The Buffer()
constructor has been deprecated for a while. Is this really an issue?
Surveys of code in the npm
ecosystem have shown that the Buffer()
constructor is stillwidely used. This includes new code, and overall usage of such code has actually beenincreasing.
Contents
Backup and Export Configuration
When you perform a backup through Cisco UCS Manager, you take a snapshot of all or part of the system configuration and export the file to a location on your network. You cannot use Cisco UCS Manager to back up data on the servers.
You can perform a backup while the system is up and running. The backup operation only saves information from the management plane. It does not have any impact on the server or network traffic.
Backup Types
You can perform one or more of the following types of backups through Cisco UCS Manager:
Full state—A binary file that includes a snapshot of the entire system. You can use the file generated from this backup to restore the system during disaster recovery. This file can restore or rebuild the configuration on the original fabric interconnect, or recreate the configuration on a different fabric interconnect. You cannot use this file for an import.
All configuration—An XML file that includes all system and logical configuration settings. You can use the file generated from this backup to import these configuration settings to the original fabric interconnect or to a different fabric interconnect. You cannot use this file for a system restore.
System configuration—An XML file that includes all system configuration settings such as usernames, roles, and locales. You can use the file generated from this backup to import these configuration settings to the original fabric interconnect or to a different fabric interconnect. You cannot use this file for a system restore.
Logical configuration—An XML file that includes all logical configuration settings such as service profiles, VLANs, VSANs, pools, and policies. You can use the file generated from this backup to import these configuration settings to the original fabric interconnect or to a different fabric interconnect. You cannot use this file for a system restore.
Considerations and Recommendations for Backup Operations
Before you create a backup operation, consider the following:
The backup location is the destination or folder on the network where you want Cisco UCS Manager to export the backup file. You can maintain only one backup operation for each location where you plan to save a backup file.
If you rerun a backup operation without changing the filename, Cisco UCS Manager overwrites the existing file on the server. To avoid overwriting existing backup files, change the filename in the backup operation or copy the existing file to another location.
You can run and export more than one type of backup to the same location. You need to change the backup type before you rerun the backup operation. We recommend that you change the filename for easier identification of the backup type and to avoid overwriting the existing backup file.
You cannot schedule a backup operation. You can, however, create a backup operation in advance and leave the admin state disabled until you are ready to run the backup. Cisco UCS Manager does not run the backup operation, save, or export the configuration file until you set the admin state of the backup operation to enabled.
You cannot perform incremental backups of the Cisco UCS Manager system configuration.
Starting with Release 1.1(1) of the Cisco UCS Manager, full state backups are encrypted so that passwords and other sensitive information are not exported as clear text. As a result, full state backups made from Release 1.1(1) or later cannot be restored to a Cisco UCS instance running an earlier software release.
Import Configuration
You can import any configuration file that was exported from Cisco UCS Manager. The file does not need to have been exported from the same Cisco UCS Manager.
Warning Node Has Slots In Importing State Park
The import function is available for all configuration, system configuration, and logical configuration files. You can perform an import while the system is up and running. An import operation modifies information on the management plane only. Some modifications caused by an import operation, such as a change to a vNIC assigned to a server, can cause a server reboot or other operations that disrupt traffic.
You cannot schedule an import operation. You can, however, create an import operation in advance and leave the admin state disabled until you are ready to run the import. Cisco UCS Manager will not run the import operation on the configuration file until you set the admin state to enabled.
You can maintain only one import operation for each location where you saved a configuration backup file.
Import Methods
You can use one of the following methods to import and update a system configuration through Cisco UCS Manager:
Merge—The information in the imported configuration file is compared with the existing configuration information. If there are conflicts, the import operation overwrites the information on the Cisco UCS instance with the information in the import configuration file.
Replace—The current configuration information is replaced with the information in the imported configuration file one object at a time.
System Restore
You can restore a system configuration from any full state backup file that was exported from Cisco UCS Manager. The file does not need to have been exported from the Cisco UCS Manager on the system that you are restoring.
The restore function is only available for a full state backup file. You cannot import a full state backup file. You perform a restore through the initial system setup.
You can use the restore function for disaster recovery.
Required User Role for Backup and Import Operations
You must have a user account that includes the admin role to create and run backup and import operations.
Backup Operations
Creating a Backup Operation
Before You BeginObtain the backup server IP address and authentication credentials.
Procedure
Step 1 | In the Navigation pane, click the Admin tab. | ||||||||||||||||||||||||
Step 2 | Click the All node. | ||||||||||||||||||||||||
Step 3 | In the Work pane, click the General tab. | ||||||||||||||||||||||||
Step 4 | In the Actions area, click Backup Configuration. | ||||||||||||||||||||||||
Step 5 | In the Backup Configuration dialog box, click Create Backup Operation. | ||||||||||||||||||||||||
Step 6 | In the Create Backup Operation dialog box, complete the following fields:
| ||||||||||||||||||||||||
Step 7 | Click OK. | ||||||||||||||||||||||||
Step 8 | If Cisco UCS Manager displays a confirmation dialog box, click OK. If you set the Admin State field to enabled, Cisco UCS Manager takes a snapshot of the configuration type that you selected and exports the file to the network location. The backup operation displays in the Backup Operations table in the Backup Configuration dialog box. | ||||||||||||||||||||||||
Step 9 | (Optional)To view the progress of the backup operation, do the following:
The FSM Details area expands and displays the operation status. | ||||||||||||||||||||||||
Step 10 | Click OK to close the Backup Configuration dialog box. The backup operation continues to run until it is completed. To view the progress, re-open the Backup Configuration dialog box. |
Running a Backup Operation
ProcedureStep 1 | In the Navigation pane, click the Admin tab. |
Step 2 | Click the All node. |
Step 3 | In the Work pane, click the General tab. |
Step 4 | In the Actions area, click Backup Configuration. |
Step 5 | In the Backup Operations table of the Backup Configuration dialog box, click the backup operation that you want to run. The details of the selected backup operation display in the Properties area. |
Step 6 | In the Properties area, complete the following fields:
|
Step 7 | Click Apply. Cisco UCS Manager takes a snapshot of the configuration type that you selected and exports the file to the network location. The backup operation displays in the Backup Operations table in the Backup Configuration dialog box. |
Step 8 | (Optional)To view the progress of the backup operation, click the down arrows on the FSM Details bar. The FSM Details area expands and displays the operation status. |
Step 9 | Click OK to close the Backup Configuration dialog box. The backup operation continues to run until it is completed. To view the progress, re-open the Backup Configuration dialog box. |
Modifying a Backup Operation
You can modify a backup operation to save a file of another backup type to that location or to change the filename and avoid overwriting previous backup files.
ProcedureStep 1 | In the Navigation pane, click the Admin tab. |
Step 2 | Click the All node. |
Step 3 | In the Work pane, click the General tab. |
Step 4 | In the Actions area, click Backup Configuration. |
Step 5 | In the Backup Operations area of the Backup Configuration dialog box, click the backup operation that you want to modify. The details of the selected backup operation display in the Properties area. If the backup operation is in a disabled state, the fields are dimmed. |
Step 6 | In the Admin State field, click the enabled radio button. |
Step 7 | Modify the appropriate fields. You do not have to enter the password unless you want to run the backup operation immediately. |
Step 8 | (Optional)If you do not want to run the backup operation immediately, click the disabled radio button in the Admin State field. |
Step 9 | Click OK. |
Deleting One or More Backup Operations
ProcedureStep 1 | In the Navigation pane, click the Admin tab. | |||||
Step 2 | Click the All node. | |||||
Step 3 | In the Work pane, click the General tab. | |||||
Step 4 | In the Actions area, click Backup Configuration. | |||||
Step 5 | In the Backup Operations table of the Backup Configuration dialog box, click the backup operations that you want to delete.
| |||||
Step 6 | Click the Delete icon in the icon bar of the Backup Operations table. | |||||
Step 7 | If Cisco UCS Manager GUI displays a confirmation dialog box, click Yes. | |||||
Step 8 | In the Backup Configuration dialog box, click one of the following:
|
Import Operations
Creating an Import Operation
You cannot import a Full State configuration file. You can import any of the following configuration files:
All configuration
System configuration
Logical configuration
Collect the following information that you will need to import a configuration file:
Backup server IP address and authentication credentials
Fully qualified name of a backup file
Procedure
Step 1 | In the Navigation pane, click the Admin tab. | ||||||||||||||||||||
Step 2 | Click the All node. | ||||||||||||||||||||
Step 3 | In the Work pane, click the General tab. | ||||||||||||||||||||
Step 4 | In the Actions area, click Import Configuration. | ||||||||||||||||||||
Step 5 | In the Import Configuration dialog box, click Create Import Operation. | ||||||||||||||||||||
Step 6 | In the Create Import Operation dialog box, complete the following fields:
| ||||||||||||||||||||
Step 7 | Click OK. | ||||||||||||||||||||
Step 8 | In the confirmation dialog box, click OK. If you set the Admin State to enabled, Cisco UCS Manager imports the configuration file from the network location. Depending upon which action you selected, the information in the file is either merged with the existing configuration or replaces the existing configuration. The import operation displays in the Import Operations table of the Import Configuration dialog box. | ||||||||||||||||||||
Step 9 | (Optional)To view the progress of the import operation, do the following:
The FSM Details area expands and displays the operation status. | ||||||||||||||||||||
Step 10 | Click OK to close the Import Configuration dialog box. The import operation continues to run until it is completed. To view the progress, re-open the Import Configuration dialog box. |
Warning Node Has Slots In Importing States
Running an Import Operation
You cannot import a Full State configuration file. You can import any of the following configuration files:
All configuration
System configuration
Logical configuration
Warning Node Has Slots In Importing Statement
ProcedureStep 1 | In the Navigation pane, click the Admin tab. |
Step 2 | Click the All node. |
Step 3 | In the Work pane, click the General tab. |
Step 4 | In the Actions area, click Import Configuration. |
Step 5 | In the Import Operations table of the Import Configuration dialog box, click the operation that you want to run. The details of the selected import operation display in the Properties area. |
Step 6 | In the Properties area, complete the following fields:
|
Step 7 | Click Apply. Cisco UCS Manager imports the configuration file from the network location. Depending upon which action you selected, the information in the file is either merged with the existing configuration or replaces the existing configuration. The import operation displays in the Import Operations table of the Import Configuration dialog box. |
Step 8 | (Optional)To view the progress of the import operation, click the down arrows on the FSM Details bar. The FSM Details area expands and displays the operation status. |
Step 9 | Click OK to close the Import Configuration dialog box. The import operation continues to run until it is completed. To view the progress, re-open the Import Configuration dialog box. |
Modifying an Import Operation
ProcedureStep 1 | In the Navigation pane, click the Admin tab. |
Step 2 | Click the All node. |
Step 3 | In the Work pane, click the General tab. |
Step 4 | In the Actions area, click Import Configuration. |
Step 5 | In the Import Operations area of the Import Configuration dialog box, click the import operation that you want to modify. The details of the selected import operation display in the Properties area. If the import operation is in a disabled state, the fields are dimmed. |
Step 6 | In the Admin State field, click the enabled radio button. |
Step 7 | Modify the appropriate fields. You do not have to enter the password unless you want to run the import operation immediately. |
Step 8 | (Optional)If you do not want to run the import operation immediately, click the disabled radio button in the Admin State field. |
Step 9 | Click OK. |
Deleting One or More Import Operations
ProcedureStep 1 | In the Navigation pane, click the Admin tab. | |||||
Step 2 | Click the All node. | |||||
Step 3 | In the Work pane, click the General tab. | |||||
Step 4 | In the Actions area, click Import Configuration. | |||||
Step 5 | In the Import Operations table of the Backup Configuration dialog box, click the import operations that you want to delete.
| |||||
Step 6 | Click the Delete icon in the icon bar of the Import Operations table. | |||||
Step 7 | If Cisco UCS Manager GUI displays a confirmation dialog box, click Yes. | |||||
Step 8 | In the Import Configuration dialog box, click one of the following:
|
Restoring the Configuration for a Fabric Interconnect
Before You BeginCollect the following information that you will need to restore the system configuration:
Fabric interconnect management port IP address and subnet mask
Default gateway IP address
Backup server IP address and authentication credentials
- Fully qualified name of a Full State backup file
NoteYou must have access to a Full State configuration file to perform a system restore. You cannot perform a system restore with any other type of configuration or backup file.
Procedure
Step 1 | Connect to the console port. | ||||||||||
Step 2 | If the fabric interconnect is off, power on the fabric interconnect. You will see the power on self-test message as the fabric interconnect boots. | ||||||||||
Step 3 | At the installation method prompt, enter gui. | ||||||||||
Step 4 | If the system cannot access a DHCP server, you may be prompted to enter the following information:
| ||||||||||
Step 5 | Copy the web link from the prompt into a web browser and go to the Cisco UCS Manager GUI launch page. | ||||||||||
Step 6 | On the launch page, select Express Setup. | ||||||||||
Step 7 | On the Express Setup page, select Restore From Backup and click Submit. | ||||||||||
Step 8 | In the Protocol area of the Cisco UCS Manager Initial Setup page, select the protocol you want to use to upload the full state backup file:
| ||||||||||
Step 9 | In the Server Information area, complete the following fields:
| ||||||||||
Step 10 | Click Submit. You can return to the console to watch the progress of the system restore. The fabric interconnect logs in to the backup server, retrieves a copy of the specified full-state backup file, and restores the system configuration. For a cluster configuration, you do not need to restore the secondary fabric interconnect. As soon as the secondary fabric interconnect reboots, Cisco UCS Manager sychronizes the configuration with the primary fabric interconnect. |