OpenSolaris
Collectives
Discussions
Documentation
Download
Source Browser
Free CD
Log-in
|
en
Community Group on
:
CRT
>
RTI nits to avoid
Top Menu
Show
:
Comments
Attachments
History
Information
Print
:
Print
Print preview
Export as PDF
Export as RTF
Export as HTML
Export as XAR
Wiki code for
RTI nits to avoid
Hide Line numbers
1: = RTI nits to avoid = 2: 3: == Submitters == 4: 5: * Security issues 6: ** Sun has to walk a fine line with security fixes between customers on older releases who need patches and customers running the latest stuff for which the source is available. Sometimes this involves coordinating patch releases with 3rd party organizations and other vendors. Thus we handle each such issue individually; to do so, please coordinate with <scteam at sun dot com>. 7: * Mixed (closed and open) source integrations with Nevada build 97 and later: 8: ** You should have one RTI with all of the relevant output, as outlined below and in webRTI, for both gates. 9: ** You will need to do two {{code}}hg push{{/code}} commands, one from each repo. Closed needs to be pushed first. 10: * SCCS Keywords 11: ** For Nevada builds 97 and later: 12: *** ident usage (whether #pragma, ident, or .ident) should be cleaned up incrementally. If you touch a file, you should remove these strings. The {{code}}hg keywords{{/code}} (part of {{code}}hg nits{{/code}} and {{code}}hg pbchk{{/code}}) command should correctly complain about this. So look for clean {{code}}hg keywords{{/code}} output. 13: *** Any other usage SHOULD have been cleaned up prior to the Mercurial transition, but it’s possible that some was missed. For this, please remove the usage entirely. If that is an unacceptable answer, and you deem the usage to be an interface, the keywords may be replaced with their static expansion (or incremented therefrom), or the user may use {{code}}hg id{{/code}} or {{code}}hg log{{/code}} output for version information. The {{code}}hg id{{/code}} command refers to the entire repository, while the {{code}}hg log {{/code}} command refers to a file or set of files. 14: ** For Solaris 10 Updates, older sustaining releases: 15: *** SCCS keywords, where used, must not be expanded in your source code. {{code}}wx nits{{/code}} will verify this for you. 16: *** SCCS keywords should not be used as an interface for checking versioning or be output in any way, shape or form. Instead leverage existing information like the list of installed packages and mdb \ commands (::showrev -v and ::objects -v). 17: * Testing 18: ** Developers are responsible for validating their changes prior to integration. This work should be described in the "Test Results" section of the RTI. 19: \\Developers are also responsible for anticipating the need for ongoing regression testing of their changes. 20: \\These considerations should be described in the "Comments" section of the RTI, and should include: 21: *** Changes to existing functionality, such that existing test suites need to be modified. 22: *** New functionality, such that new test suites will be needed. 23: \\If either of these is the case, the "T" (Test Impact) button should be selected in your RTI. 24: \\If you require new tests or significant modifications, please contact ON Test Sponsors and the {{code}}RTI-test-review@sun.com{{/code}} before submitting your RTI. If you’re not sure what constitutes a "significant" modification, please consult the same test sponsor group for clarification. 25: \\If your changes are minor, file the appropriate bugs against the test suites and implement the change yourself. If implementing the change yourself is not practical, contact ON Test Sponsors and the RTI-test-review@sun.com to discuss potential assistance. List the CR number(s) in the "Comments" section of the RTI, and discuss the regression testing implications with your CRT advocate. 26: \\Please do not submit your RTI until the relevant test changes are also committed. Your RTI should not be approved until the tests are ready. 27: \\ You and and your advocate can use your best judgment on whether automated testing is appropriate for your fix. 28: * The following "paperwork items" in the bug (CR) reports should be done: 29: ** The {{code}}Description{{/code}} text should contain, surprisingly enough, a description of the problem, which should be at least as detailed as the Synopsis, and preferably much more. Note in particular that "See Comments" alone is never appropriate. While proprietary data (Sun confidential or customer confidential) must not be placed in the Description text, as much data as possible should be placed there. For security issues where there is a temporary need for secrecy until the problem is made public, put something vague then plan on updating it to be specific once the issue is made public. For issues involving proprietary customer information, either redact any proprietary information or move it to the Comments text, and write a high-level description which does not contain proprietary data. 30: ** The {{code}}Status{{/code}} field should not be {{code}}1-Dispatched{{/code}}. {{code}}7-Fix in Progress{{/code}} is usual, though {{code}}5-Cause Known{{/code}}, {{code}}6-Fix Understood{{/code}} and even {{code}}8-Fix Available{{/code}} are fine too. 31: ** For Defects (as opposed to RFEs), the {{code}}Introduced in Release/Build{{/code}} and {{code}}Root Cause{{/code}} (under the {{code}}More Info{{/code}} tab) fields must be filled in. Note that the {{code}}Introduced in Release/Build{{/code}} field’s value should be that of a marketing release (e.g., {{code}}snv_01{{/code}}), not that of an update release. Also, if a bug ID exists for the changes(s) which introduced this problem, that/those bug ID(s) should be listed in the {{code}}See Also{{/code}} field. If the bug has been around "forever", using "{{code}}solaris_2.0{{/code}}" as an Introduced in Release is acceptable. 32: ** With respect to the Suggested Fix text, some very helpful suggestions follow, though of course common sense should always be applied: 33: *** A brief high-level description of the changes is good, especially if the diffs won’t fit and need to be attached. 34: *** Each source module’s full path (//e.g.//, {{code}}usr/src/.../foo.c{{/code}}) should be specified in the {{code}}Suggested Fix{{/code}} text. Further, this text field should contain the diffs for each affected module. Context diffs ({{code}}diff -c{{/code}} or {{code}}diff -u{{/code}}, or {{code}}sccs diffs -C{{/code}} or {{code}}hg pdiff{{/code}}) are preferred if they will fit. If the diffs won’t fit in one note entry in Bugster, try splitting them across mutiple entries of the Suggested Fix (for example, one file per entry). If they are so large that doing so would be overly laborious, then include a list of files that are impacted by this CR, attach full diffs to the CR and make sure you include a webrev in the RTI comments. 35: *** Note that the diffs should be in a permanent form, such as described above. A URL pointing to a webrev or any other transient data is allowable, but insufficient for a bug report, as the data in the bug report is expected to last, whereas webrevs and other URLs often disappear shortly after integration. 36: *** The diffs should be pointing the "right" way. webrev, {{code}}sccs diffs{{/code}} and {{code}}hg pdiff{{/code}}will get this right; using {{code}}diff{{/code}} from the command line, make sure you do {{code}}diff old new{{/code}}. 37: *** When fixing multiple bugs as part of single wad, list the minimal set of diffs whenever possible. Sometimes the fixes are too intertwined to list separately, which is OK, but when that is not the case, listing minimal diffs makes it easier to understand each fix separately. 38: ** If your changes require corresponding changes in Solaris man pages or documentation, then you should also make sure that: 39: *** The {{code}}Fix Affects Documentation{{/code}} field (under the {{code}}More Info{{/code}} tab in the bug report) should be set to {{code}}yes{{/code}} to match. 40: *** File man page and/or documentation bugs as needed, and list those bug IDs in WebRTI. 41: *** The corresponding man page bug IDs should be listed in the {{code}}See Also{{/code}} field of the engineering bug report. Furthermore, WebRTI requires that man page bugs be in the {{code}}7-Fix in Progress{{/code}} state and other documentation bugs to be in the {{code}}3-Accepted State{{/code}} before an RTI can be accepted. The man page group therefore recommends: 42: *** Filing man page bugs 4 builds ahead for moderately large projects, 2 builds ahead for minor changes to one or more man pages. 43: *** If your change needs to be integrated in the current build, file the man page bug as soon as you know that your code fix requires man page changes. 44: *** Include specific instructions regarding how to fix the man page in the man page bug. 45: *** Cite the associated engineering bug in the man page bug. 46: *** Notify the man page representative to the C-Team, currently Terry Gibson, that your man page bug is urgent. He will ensure that the man page receives immediate priority, or that you receive an exemption to putback your code without the man page CR being in the {{code}}7-Fix in Progress{{/code}} state. 47: ** The Synopsis should be a concise description of the problem, free from references to a specific build or release (unless only that build or release is impacted), and free from spelling and grammatical errors. Most of all, it should make sense. As the CR is investigated and the issue is better understood, the Synopsis should be updated to make sure it remains an accurate synopsis of the issue being addressed. This text often appears later in patch README files and other externally consumable formats. 48: * Output of dry run command to commit your changes 49: ** For Nevada builds 97 and later, the RTI should have your {{code}}hg outgoing -v{{/code}} in the putback -n section and a pointer to your webrev in the comments section. Note that the {{code}}user:{{/code}} entry should contain a valid e-mail address (i.e., user@domain, where domain is valid both inside and outside the SWAN). Note also that this {{code}}user:{{/code}} shows up as an {{code}}Author:{{/code}} entry in the {{code}}`hg push`{{/code}} e-mail. This value can be set using the {{code}}username={{/code}} line in the {{code}}[ui]{{/code}} section of your {{code}}$HOME/.hgrc{{/code}} file. 50: ** For Solaris 10 updates and older sustaining releases, the RTI should also have your {{code}}`putback -n`{{/code}} in the {{code}}putback -n{{/code}} section and a pointer to your webrev in the comments section. Note also that if you run {{code}}`putback -n`{{/code}} on the gate machine (which is allowed), the path to your child workspace (which you should include in the RTI) will be sufficiently qualified for an RTI advocate (who will often inspect your workspace) to find it. 51: * The list of code reviewers should be individuals who have actually reviewed the code, not an alias for a group of people who were given the opportunity to do so. 52: * Other more general nits: 53: ** No bug IDs in the source code; the sccs delta comments or the Mercurial changeset descriptions cover that. 54: ** For Nevada build 97 and later, there should be no merge changesets; {{code}}hg pbchk{{/code}} should be clean. 55: ** For Solaris 10 and earlier sustaining releases, each source file should add only a single delta, //without// "merge turds". In the case where a putback includes multiple bug fixes and/or ARC cases, multiple deltas are allowed, but there should still only be a single delta per bug fix and/or ARC case. 56: * Here is an explanation of what the Risk and Impact fields are for: 57: ** Risk assesses how much confidence that we have that the fix will not introduce other problems, and a component of how easy it would be to avoid them problems if they occur. 58: ** Impact is somewhat akin to external side-effects: the customer will no longer see the bug, but will notice something else in an adverse way. 59: *** API changes might stop an application from working. 60: *** Documentation changes can have subtler effects. 61: *** Header file changes may cause code compilation problems. Note that e.g. if you have a private header file and you fix all of the consumers, that does not count as external, so you need not mark Header impact. But header files consumed by other projects generally merit Header impact and updating a header file which is shipped in {{code}}/usr/include{{/code}} always merits Header impact. 62: *** Packaging / namespace may remove something they rely on if they have built-in paths 63: *** Testing changes means one or more test suites need to be added or updated, and the CR(s) for such changes should be listed in the comments section of the RTI. 64: *** "Other" includes everything else and we require details in the comment section of the RTI to say what it is. Examples of other effects are: 65: **** slower 66: **** uses more memory 67: **** change in messages not covered by documentation changes 68: **** causes a flag day 69: **** requires a coordinated putback in a different consolidation An Impact of none is the default case: The bug got fixed is all that the customer can detect. If Impact is //not// none, it should always be explained in the RTI comments. 70: 71: == Reviewers == 72: 73: * Naked {{code}}strcpy(){{/code}}, {{code}}strcat(){{/code}} and {{code}}sprintf(){{/code}} calls should be avoided wherever possible; use {{code}}strlcpy(){{/code}}, {{code}}strlcat(){{/code}} and {{code}}snprintf(){{/code}} respectively instead. 74: * You should not be listed as a reviewer for your own RTI: the point is that someone //else// should review your code. 75: * It is OK to have reviewers who are not Sun employees. Advocates should treat them the same as Sun employees, making judgements based on how well one knows each reviewer and the history and quality of his/her work. When such reviewers are listed in WebRTI, the e-mail notices do go outside Sun, so take care in such cases to avoid putting any proprietary or confidential data in any comments. [Such data is rare in RTIs; if needed, move it to the Comments note of the bug report(s) and put a pointer to that in the RTI.] 76: 77: == Advocates == 78: 79: * You can not be the advocate for your own RTI: the point is that someone //else// should review your work. Furthermore, if you are listed as one of the reviewers, then make sure that there is at least one other reviewer (or two in the builds leading up to a milestone) besides yourself. 80: * Workspace checking is highly recommended, as it is easy and quick and has prevented many problems; also, many problems which could have easily been prevented were from workspaces which were not checked. 81: * Check that the "user" in the {{code}}hg outgoing -v{{/code}} output to make sure it is a valid email address that belongs to the user doing an integration. 82: 83: == Sponsors for External Contributors == 84: 85: * A Sun Contributor Agreement (SCA) must be on file for the contributor. 86: * You can check [[the request-sponsor table>>Main.request_sponsor]] to see if the SCA number is listed for the contributor (it usually is). If not, check with the contributor to sure s/he filed the form and find out the number. There is also an internal table available that can be checked. If you don’t know where this table is located, check with oso-admin@opensolaris.org. 87: * The rest of the "sponsoring nits" are on the [[Sponsor Tasks>>Community Group on.sponsor-tasks]] page.
Search
Collectives
Community Group
Academic and Research
Accessibility
Advocacy
Appliances
Approachability
Architecture Process and Tools
BrandZ
Chinese Users
Community Advisory Board
Databases
Desktop
Device Drivers
Distribution
Documentation
DTrace
Emerging Platforms
Fault Management
Games on OpenSolaris
HA Clusters
HPC Developer
Installation and Packaging
Internationalization and Localization
Laptop
Logical Domains
Modular Debugger (MDB)
Networking
NFS
Observability
OpenSolaris Governing Board (OGB)
OpenSolaris Printing
OS/Net (ON)
Performance
Power Management
PowerPC
Security
Service Management Facility (smf(5))
Software Porters
Solaris Volume Manager
Storage
Systems Administration Community Group
Testing
Tools Home
Unix File Systems (UFS)
Website Community
X Window System
Xen
ZFS
Zones
Project
ADSL Modem Enhancement
ARC Process Definition
ARM Platform Port
Automatic Data Migration
BIND Update
Bluetooth Stack & Drivers
Brocade FC HBA - Initiator
Brocade FC HBA - Target
Brussels - unified network link configuration
Caiman, Solaris Install Revisited
Celeste
Český portál
Chime Visualization Tool for DTrace
CIFS client for Solaris
CIFS Server
Clearview: Network Interface Coherence
Cluster Agent: Informix Dynamic Server
Cluster Agent: OpenSolaris Container
Cluster Agent: OpenSolaris xVM
Cluster Agent: Oracle E-Business Suite
Cluster agent: PostgreSQL
Cluster Agent: Samba
Cluster Agent: Tomcat
CMT
Coarse Data Flow Parallelism
Colorado: Open HA Cluster on OpenSolaris
Command Assistant
Common Array Manager
Companion - /opt/sfw: Free and Open Source software
COMSTAR: Common Multiprotocol SCSI Target
Content
Contest
CPU Observability
Credentials Process Groups
Crossbow: Network Virtualization and Resource Control
Crypto KMS Agent Toolkit
Cryptographic Framework
Data Migration Manager
Data Tethers
Deutsches Portal
Device Detection Tool
Device Driver Utility
Device Manager
Device Mapper
Direct Rendering Infrastructure & 3D drivers
DTrace Guide
Duckwater: Simplified name services management
Easy Tools
Emancipation
Emulex Fibre Channel Device Driver
Emulex Advanced Ethernet Device Driver
Enable/Enhance Solaris support for Intel Platform
Enhance the support of USB webcams
Enhanced SMF Profiles
Enhancements for AMD-based Platforms
Erlang DTrace Integration
Ethernet bridge module for Solaris
Evaluate Conary
Events Registry
Ext3 file system support
F/OSS Package Base
Facilitation
Fibre Channel over Ethernet
Fine Grained Access Policy (FGAP)
Fingerprint Authentication
Flexible Mandatory Access Control
Forensic Tools
Fully Open X Project
Fuse on Solaris
gcore
Generic Machine Check Architecture Improvements
Google SOC
HA-JBoss
HA-MySQL
Hadoop Live CD
Hitachi
HoneyComb Fixed Content Storage
HPC Stack
Image Packaging System
Improved Performance MIB
Indiana
Innovation Awards
Input Method
Intel Graphics
Interrupt Resource Management
IP Datapath Refactoring
IP over Infiniband
IPsec Tunnel Reform
iSCSI Extensions for Remote DMA (iSER)
iSNS Server
JeOS - Just enough Operating System
JKstat - a java binding for libkstat
Journaled File System (JFS)
K Desktop Environment
Kerberos
Kernel Sockets
Kernel SSL Enhancements
Key Management Framework
Korn Shell 93 integration/migration project
Labeled IPsec
LatencyTOP
Layer 2 Filtering
LDoms Manager
Lending
libMicro - portable microbenchmarks
Link Layer Discovery
Live Media: Technologies for distributions running from CD and other media
Locale Data
lofi compression and cryptography support
lx64 brand
Media Management System
Mega_sas
Mexico
MilaX minimal Live Distribution
MIPS Platform Port
Mozilla DTrace
MRSL.NONsharedDevice
Multi-lingual Glossary
Multi-pathing software (MPxIO)
Multiple disk sector size support
Multiple DOI
Muskoka: An open repository for OpenSolaris technical content
Navigator
Nemo: A Framework for High-Performance Networking
Network Auto-Magic
Network Data Management Protocol
Network MIBs
Network Storage
Network Time Protocol (NTP)
Nevada Globalization
New Design of 4over6 Mechanism Based on OpenSolaris
NFS RDMA transport update and performance analysis
NFS Server in non-Global Zones
NFS version 4.1 pNFS
NFSv4 namespace extensions
Nightingale: Port Songbird to OpenSolaris
NPort ID Virtualization (NPIV)
NUMA
Object Storage Device (OSD) support for Solaris
OHACGE Script Based Plug-in
ON/Nevada (ONNV) Project
Open Development Infrastructure
Open HA Cluster Utilities
Open Sound System
OpenGrok
OpenPegasus CIM Server
OpenRTI
OpenSolaris Busybox
OpenSolaris Desktop
OpenSolaris Hispano
OpenSolaris Security Audit
OpenSolaris support for the QEMU processor emulator: host and guest
PEF: Packet Event Framework
Performance Wrappers
Pkgfactory
Polski Portal
Portail Francophone
Portal Brasil
Portals
Power Management Usability Interfaces
Presto: Automatic Printing Configuration
Printable Many Page Solaris Manuals
Promise SuperTrak RAID HBA Driver
QLogic Converged Network Adapter GLDv3 NIC Driver
Quagga Routing Protocol Suite Integration
RAID Configuration Utility
RBridge (IETF TRILL) support
RDMA Offload Framework
Reno: Login Process Enhancements for Interop
Resource Management
s10brand
SAM/QFS
SCM Migration Project
SCSI RDMA Protocol
SDcard Drivers
Sensor Abstraction Layer
Session Initiation Protocol
SFW
Shell: bourne shell, korn shell, C shell, etc.
Sierra: Intel WiFi Chipsets Support
Simple Panels
SM-HBA Based SAS HBA Management
SMF Documentation
Solaris iSCSI Target
Solaris PowerPC Port
SourceJuicer
Sparks: name service switch/nscd enhancements
Squashfs
Star integration/migration project
Starfish
Starter Kit
Storage Power Management
Sun Security Toolkit
Sun StorageTek Availability Suite
Support for OpenFabrics User Verbs / API on OpenSolaris OS
Support gcc4/GCCfss in Solaris
Suspend/Resume
SVR4 Packaging
Systemz
Tamarack: Removable Media Enhancements in Solaris
Tesla: OpenSolaris Enhanced Power Management
Test Development
Tickless Kernel Architecture
TIPC
Trademarks
Trusted networking interface policy database for Trusted Extensions
Trusted Platform Module support
Use Case
Validated Execution Project
Virtual Console
Virtual Network Machines
Visual Panels
Visualization for HPC
Volo
VRRP: Virtual Router Redundancy Protocol Implementation
VSCAN service
Web Stack
Website
Winchester: Schema mapping and ID mapping for AD Interoperability
Wireless USB Support
Wireless Wide Area Network
X Consolidation
x86 Generic FMA Topology Enumerator
Xen Gate
Xfce: A lightweight desktop environment
ZFS Boot and Install
ZFS on disk encryption support
Zone Manager
Zone Statistics
Русский портал
البوابة العربية
भारतीय पोर्टल
中国门户
日本ポータル
한국 포탈
User Group
Adelaide
Argentina
Arizona
Atlanta
Baltimore-Washington
Bangalore
Bangkok
Bangladesh
Beijing
Bélem
Berlin
Bhimavaram
Bloomington
Campus Ambassadors
Capital Region
Cardiff
Charlotte
Chengdu
Chennai
Chihuahua
Chile
Cleveland
Colombia
Columbus
Connecticut
Cracow
Czech
Dallas/Ft. Worth
Danish
Delaware
Edinburgh
Egypt
Finland
Florida
Front Range
FuZhou
Great Lakes
Greece
Hangzhou
Hawaii
HeFei
Houston
Hyderabad
Indonesia
Irish
Israel
Italian
Jinan
Kabul
Kansas City
Latvia
London
Madurai
Manchester
Mato Grosso
Melbourne
Minas Gerais
Minnesota
Montreal
Moscow
Mumbai
Munich
NEA
Netherlands
New England
New York City
New Zealand
NIT Hamirpur
Noroeste
Oklahoma City
Osnabrück
Peru
Philadelphia
Piaski
Pittsburgh
Porto Alegre
Puget Sound
Pune
Queensland
Research Triangle Park
Romania
Russia
San Antonio
San Diego
San Francisco
São Paulo
Scottish
Serbia
Shanghai
Shenzhen
Silicon Valley
Singapore
Slovak
South African
Southern Connecticut
St. Louis
Sweden
Switzerland
Sydney
Szczecin
Taiwan
Tecum
Thames Valley
Tokyo
Toronto
Trondheim
Tulsa
Turkey
Ukraine
University of Melbourne
Vale do Paraíba
Vancouver
Venezuela
Welsh - Cymru
Wisconsin
Xi'an
Subsites
Code Reviews
Code Repositories
Package Search
Bugster
Bugzilla
Test Machines
Planet
Mailing Lists
Elections & Polls
ARC Case Logs
Source Juicer
Package Factory
User Authentication
Community Group on Pages
CRT
Advocates & Sponsors
Becoming a Sponsor
Becoming a CRT Advocate
Charter
RTI nits to avoid
Sponsor Tasks
Developing Solaris
Quality Death Spiral
Developer's Reference
Introduction
Prerequisites
The Source Tree, part 1
The Source Tree, part 2
Building OpenSolaris
Installing and Testing OpenSolaris
Integration Procedure
Best Practices and Requirements
Glossary
findunref and unreferenced files
ONNV Flag Days, Heads Ups, and Project Integration History
Builds 101-105
Builds 106-110
Builds 111-115
Builds 116-120
Builds 121-125
Builds 126-130
Builds 21-25
Builds 26-30
Builds 31-35
Builds 36-40
Builds 41-45
Builds 46-50
Builds 51-55
Builds 56-60
Builds 61-65
Builds 66-70
Builds 71-75
Builds 76-80
Builds 81-85
Builds 86-90
Builds 91-95
Builds 96-100
Installation (from source) Quickstart
Annotated nightly(1) Mail Example
Currently Known Issues
Putback Logs
Development Process
Schedule
Bourne/Korn Shell Coding Conventions
wx